WebAssembly λͺ¨λ μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μ¬μΈ΅ λΆμνμ¬, 보μ, νμ κ²μ¬ λ° λ€μν κΈλ‘λ² νλ«νΌμμμ μμ ν μ€νμ 보μ₯νλ ν΅μ¬μ μΈ μν μ νꡬν©λλ€.
WebAssembly λͺ¨λ μ ν¨μ± κ²μ¬ νμ΄νλΌμΈ: κΈλ‘λ² νκ²½μμμ 보μ λ° νμ λ¬΄κ²°μ± λ³΄μ₯
WebAssembly(Wasm)λ μΉκ³Ό κ·Έ λλ¨Έμμ κ³ μ±λ₯μ μ΄μ κ°λ₯ν μ½λ μ€νμ κ°λ₯νκ² νλ νμ μ μΈ κΈ°μ λ‘ λΉ λ₯΄κ² λΆμνμ΅λλ€. κ±°μ λ€μ΄ν°λΈμ κ°κΉμ΄ μλμ μμ ν μ€ν νκ²½μ μ½μνλ©° μΉ κΈ°λ° κ²μ, 볡μ‘ν λ°μ΄ν° μκ°νλΆν° μλ²λ¦¬μ€ ν¨μ λ° μ£μ§ μ»΄ν¨ν μ μ΄λ₯΄κΈ°κΉμ§ κ΄λ²μν μ ν리μΌμ΄μ μ λ§€λ ₯μ μΌλ‘ λ€κ°μμ΅λλ€. κ·Έλ¬λ Wasmμ κ°λ ₯ν μ±λ₯μ μ λ’°ν μ μλ μ½λκ° νΈμ€νΈ μμ€ν μ 보μμ΄λ μμ μ±μ μ ν΄νμ§ μλλ‘ λ³΄μ₯νλ κ²¬κ³ ν λ©μ»€λμ¦μ νμλ‘ ν©λλ€. λ°λ‘ μ΄ μ§μ μμ WebAssembly λͺ¨λ μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ΄ μ€μν μν μ μνν©λλ€.
μ ν리μΌμ΄μ κ³Ό μλΉμ€κ° λλ₯μ λλλ€λ©° μνΈ μμ©νκ³ λ€μν νλμ¨μ΄ λ° μννΈμ¨μ΄ ꡬμ±μμ μλνλ κΈλ‘λ² λμ§νΈ μνκ³μμλ, λ€μν μμ€λ‘λΆν° μ¨ μ½λλ₯Ό μ λ’°νκ³ μμ νκ² μ€νν μ μλ λ₯λ ₯μ΄ λ¬΄μλ³΄λ€ μ€μν©λλ€. μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μ€μν κ²μ΄νΈν€νΌ μν μ νμ¬, λ€μ΄μ€λ λͺ¨λ WebAssembly λͺ¨λμ μ€ν νκ° μ μ λ©΄λ°ν μ‘°μ¬ν©λλ€. μ΄ ν¬μ€νΈμμλ μ΄ νμ΄νλΌμΈμ 볡μ‘μ±μ κΉμ΄ νκ³ λ€μ΄ 보μκ³Ό νμ κ²μ¬ λͺ¨λμ λν μ€μμ±κ³Ό μ μΈκ³ μ¬μ©μμκ² λ―ΈμΉλ μν₯μ μ‘°λͺ ν κ²μ λλ€.
WebAssembly μ ν¨μ± κ²μ¬μ νμμ±
WebAssemblyμ μ€κ³λ λ³Έμ§μ μΌλ‘ μμ νλ©°, μλλ°μ€ μ€ν λͺ¨λΈμ κΈ°λ°μΌλ‘ ν©λλ€. μ΄λ Wasm λͺ¨λμ΄ κΈ°λ³Έμ μΌλ‘ νΈμ€νΈ μμ€ν μ λ©λͺ¨λ¦¬μ μ§μ μ κ·Όνκ±°λ κΆν μλ μμ μ μνν μ μμμ μλ―Έν©λλ€. κ·Έλ¬λ μ΄ μλλ°μ€λ Wasm λ°μ΄νΈμ½λ μ체μ 무결μ±μ μμ‘΄ν©λλ€. μ΄λ‘ μ μΌλ‘ μ μμ μΈ νμμλ μΈν°ν리ν°λ λ°νμ νκ²½μ μ μ¬μ μ·¨μ½μ μ μ μ©νκ±°λ μλλ 보μ κ²½κ³λ₯Ό μ°ννλ €λ Wasm λͺ¨λμ μ μν μ μμ΅λλ€.
λ€κ΅μ κΈ°μ μ΄ μ€μν λΉμ¦λμ€ νλ‘μΈμ€μ μ 3μ Wasm λͺ¨λμ μ¬μ©νλ μλ리μ€λ₯Ό μκ°ν΄ 보μμμ€. μ격ν μ ν¨μ± κ²μ¬ μμ΄λ κ²°ν¨μ΄ μκ±°λ μ μμ μΈ λͺ¨λμ΄ λ€μκ³Ό κ°μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€.
- λ°νμμ μΆ©λμμΌ μλΉμ€ κ±°λΆ(denial-of-service)λ₯Ό μ λ°ν©λλ€.
- Wasm μλλ°μ€μ μ κ·Ό κ°λ₯ν λ―Όκ°ν μ 보λ₯Ό μλμΉ μκ² μ μΆν©λλ€.
- μΉμΈλμ§ μμ λ©λͺ¨λ¦¬ μ κ·Όμ μλνμ¬ λ°μ΄ν°λ₯Ό μμμν¬ μ μμ΅λλ€.
λν WebAssemblyλ 보νΈμ μΈ μ»΄νμΌ λμμ΄ λλ κ²μ λͺ©νλ‘ ν©λλ€. μ΄λ C, C++, Rust, Go λ° κΈ°ν μ¬λ¬ μΈμ΄λ‘ μμ±λ μ½λκ° WasmμΌλ‘ μ»΄νμΌλ μ μμμ μλ―Έν©λλ€. μ΄ μ»΄νμΌ κ³Όμ μμ μ€λ₯κ° λ°μνμ¬ λΆμ ννκ±°λ μλͺ»λ νμμ Wasm λ°μ΄νΈμ½λκ° μμ±λ μ μμ΅λλ€. μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μ»΄νμΌλ¬κ° κ²°ν¨ μλ μΆλ ₯μ μμ±νλλΌλ ν΄λ₯Ό λΌμΉκΈ° μ μ μ΄λ₯Ό μ‘μλ λλ€.
μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μλ‘ μ½ν μλ λ κ°μ§ μ£Όμ λͺ©νλ₯Ό κ°μ§κ³ μμ΅λλ€.
1. 보μ 보μ¦
μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ κ°μ₯ μ€μν κΈ°λ₯μ νΈμ€νΈ νκ²½μ μνν μ μλ μ μμ μ΄κ±°λ μλͺ»λ νμμ Wasm λͺ¨λ μ€νμ λ°©μ§νλ κ²μ λλ€. μ¬κΈ°μλ λ€μ μ¬νμ νμΈνλ μμ μ΄ ν¬ν¨λ©λλ€.
- μ μ΄ νλ¦ λ¬΄κ²°μ±: λͺ¨λμ μ μ΄ νλ¦ κ·Έλνκ° μ ꡬμ±λμ΄ μκ³ , μ μ©λ μ μλ λλ¬ λΆκ°λ₯ν μ½λλ λΆλ²μ μΈ μ νλ₯Ό ν¬ν¨νμ§ μλμ§ νμΈν©λλ€.
- λ©λͺ¨λ¦¬ μμ μ±: λͺ¨λ λ©λͺ¨λ¦¬ μ κ·Όμ΄ ν λΉλ λ©λͺ¨λ¦¬ λ²μ λ΄μ μλμ§, λ²νΌ μ€λ²νλ‘ λλ κΈ°ν λ©λͺ¨λ¦¬ μμ μ·¨μ½μ μΌλ‘ μ΄μ΄μ§μ§ μλμ§ κ²μ¦ν©λλ€.
- νμ 건μ μ±: λͺ¨λ μμ μ΄ μ μ ν νμ μ κ°μ λν΄ μνλλμ§ νμΈνμ¬ νμ νΌλ 곡격μ λ°©μ§ν©λλ€.
- 리μμ€ κ΄λ¦¬: λͺ¨λμ΄ μμμ μμ€ν νΈμΆκ³Ό κ°μ΄ νμ©λμ§ μμ μμ μ μννμ§ μλλ‘ λ³΄μ₯ν©λλ€.
2. νμ κ²μ¬ λ° μλ―Έλ‘ μ μ νμ±
μμν 보μμ λμ΄, μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ Wasm λͺ¨λμ μλ―Έλ‘ μ μ νμ±λ μ격νκ² νμΈν©λλ€. μ΄λ₯Ό ν΅ν΄ λͺ¨λμ΄ WebAssembly μ¬μμ μ€μνκ³ λͺ¨λ μμ μ΄ νμ μμ (type-safe)νμ§ λ³΄μ₯ν©λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€.
- νΌμ°μ°μ μ€ν 무결μ±: κ° λͺ λ Ήμ΄κ° μ€ν μ€νμμ μ¬λ°λ₯Έ μμ νμ μ νΌμ°μ°μλ₯Ό μ¬μ©νμ¬ μλνλμ§ κ²μ¦ν©λλ€.
- ν¨μ μκ·Έλμ² μΌμΉ: ν¨μ νΈμΆμ΄ νΈμΆλ ν¨μμ μ μΈλ μκ·Έλμ²μ μΌμΉνλμ§ νμΈν©λλ€.
- μ μ λ³μ λ° ν μ΄λΈ μ κ·Ό: μ μ λ³μ λ° ν¨μ ν μ΄λΈμ λν μ κ·Όμ΄ μ¬λ°λ₯΄κ² μνλλμ§ κ²μ¦ν©λλ€.
μ΄λ¬ν μ격ν νμ κ²μ¬λ Wasmμ΄ λ€μν νλ«νΌκ³Ό λ°νμμμ μμΈ‘ κ°λ₯νκ³ μ λ’°ν μ μλ μ€νμ μ 곡νλ λ₯λ ₯μ κΈ°λ³Έμ λλ€. μ΄λ κ°λ₯ν κ°μ₯ μ΄λ₯Έ λ¨κ³μμ λ°©λν μ’ λ₯μ νλ‘κ·Έλλ° μ€λ₯μ 보μ μ·¨μ½μ μ μ κ±°ν©λλ€.
WebAssembly μ ν¨μ± κ²μ¬ νμ΄νλΌμΈ λ¨κ³
WebAssembly λͺ¨λμ μ ν¨μ± κ²μ¬ νλ‘μΈμ€λ λ¨μΌμ κ±°λν κ²μ¬κ° μλλΌ, λͺ¨λμ ꡬ쑰μ μλ―Έλ‘ μ λ€μν μΈ‘λ©΄μ κ²μ¬νλ μΌλ ¨μ μμ°¨μ μΈ λ¨κ³μ λλ€. μ νν ꡬνμ Wasmtime, Wasmer λλ λΈλΌμ°μ μ λ΄μ₯ μμ§κ³Ό κ°μ λ€λ₯Έ Wasm λ°νμ κ°μ μ½κ° λ€λ₯Ό μ μμ§λ§ ν΅μ¬ μμΉμ μΌκ΄λκ² μ μ§λ©λλ€. μΌλ°μ μΈ μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμλ λ€μ λ¨κ³κ° ν¬ν¨λ©λλ€.
1λ¨κ³: λμ½λ© λ° κΈ°λ³Έ ꡬ쑰 νμΈ
첫 λ²μ§Έ λ¨κ³λ λ°μ΄λ리 Wasm νμΌμ νμ±νλ κ²μ λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€.
- μ΄ν λΆμ: λ°μ΄νΈ μ€νΈλ¦Όμ μλ―Έ μλ ν ν°μΌλ‘ λΆν΄ν©λλ€.
- ꡬ문 λΆμ: ν ν° μνμ€κ° Wasm λ°μ΄λ리 νμμ λ¬Έλ²μ μ€μνλμ§ νμΈν©λλ€. μ΄λ μ¬λ°λ₯Έ μΉμ μμ λ° μ ν¨ν λ§€μ§ λλ²μ κ°μ ꡬ쑰μ μ νμ±μ νμΈν©λλ€.
- μΆμ ꡬ문 νΈλ¦¬(AST)λ‘ λμ½λ©: λͺ¨λμ νμ λ¨κ³μμ λΆμνκΈ° μ¬μ΄ λ΄λΆ ꡬ쑰νλ νμ(μ’ μ’ AST)μΌλ‘ ννν©λλ€.
κΈλ‘λ² κ΄λ ¨μ±: μ΄ λ¨κ³λ Wasm νμΌμ΄ μΆμ²μ κ΄κ³μμ΄ μ ꡬμ±λ Wasm λ°μ΄λ리μμ 보μ₯ν©λλ€. μμλμκ±°λ μλμ μΌλ‘ μλͺ»λ νμμ λ°μ΄λ리λ μ¬κΈ°μ μ€ν¨ν©λλ€.
2λ¨κ³: μΉμ μ ν¨μ± κ²μ¬
Wasm λͺ¨λμ κ°κ° νΉμ λͺ©μ μ κ°μ§ λ³κ°μ μΉμ μΌλ‘ ꡬμ±λ©λλ€(μ: νμ μ μ, κ°μ Έμ€κΈ°/λ΄λ³΄λ΄κΈ° ν¨μ, ν¨μ λ³Έλ¬Έ, λ©λͺ¨λ¦¬ μ μΈ). μ΄ λ¨κ³μμλ λ€μμ νμΈν©λλ€.
- μΉμ μ μ‘΄μ¬ λ° μμ: νμ μΉμ μ΄ μ‘΄μ¬νκ³ μ¬λ°λ₯Έ μμλ‘ μλμ§ νμΈν©λλ€.
- κ° μΉμ μ λ΄μ©: κ° μΉμ μ λ΄μ©μ νΉμ κ·μΉμ λ°λΌ μ ν¨μ±μ κ²μ¬λ°μ΅λλ€. μλ₯Ό λ€μ΄, νμ μΉμ μ μ ν¨ν ν¨μ νμ μ μ μν΄μΌ νλ©°, ν¨μ μΉμ μ μ ν¨ν νμ μ λ§€νλμ΄μΌ ν©λλ€.
μμ: λͺ¨λμ΄ νΉμ μκ·Έλμ²λ₯Ό κ°μ§ ν¨μλ₯Ό κ°μ Έμ€λ €κ³ νμ§λ§ νΈμ€νΈ νκ²½μ΄ λ€λ₯Έ μκ·Έλμ²λ₯Ό κ°μ§ ν¨μλ§ μ 곡νλ κ²½μ°, μ΄ λΆμΌμΉλ κ°μ Έμ€κΈ° μΉμ μ μ ν¨μ± κ²μ¬ μ€μ κ°μ§λ©λλ€.
3λ¨κ³: μ μ΄ νλ¦ κ·Έλν(CFG) λΆμ
μ΄λ 보μκ³Ό μ νμ±μ μν μ€μν λ¨κ³μ λλ€. μ ν¨μ± κ²μ¬κΈ°λ λͺ¨λ λ΄ κ° ν¨μμ λν μ μ΄ νλ¦ κ·Έλνλ₯Ό ꡬμ±ν©λλ€. μ΄ κ·Έλνλ ν¨μλ₯Ό ν΅ν κ°λ₯ν μ€ν κ²½λ‘λ₯Ό λνλ λλ€.
- λΈλ‘ ꡬ쑰: λΈλ‘, 루ν λ° if λ¬Έμ΄ μ¬λ°λ₯΄κ² μ€μ²©λκ³ μ’ λ£λλμ§ νμΈν©λλ€.
- λλ¬ λΆκ°λ₯ν μ½λ νμ§: μ λ λλ¬ν μ μλ μ½λλ₯Ό μλ³ν©λλ€. μ΄λ λλλ‘ νλ‘κ·Έλλ° μ€λ₯μ μ νΈμ΄κ±°λ μ μμ μΈ λ‘μ§μ μ¨κΈ°λ €λ μλμΌ μ μμ΅λλ€.
- λΆκΈ° μ ν¨μ± κ²μ¬: λͺ¨λ λΆκΈ°(`br`, `br_if`, `br_table` λ±)κ° CFG λ΄μ μ ν¨ν λ μ΄λΈμ λμμΌλ‘ νλμ§ νμΈν©λλ€.
κΈλ‘λ² κ΄λ ¨μ±: μ ꡬμ±λ CFGλ νλ‘κ·Έλ¨ μ€νμ μμμΉ λͺ»ν μμΉλ‘ 리λλ μ νλ λ° μμ‘΄νλ μ΅μ€νλ‘μμ λ°©μ§νλ λ° νμμ μ λλ€. μ΄κ²μ λ©λͺ¨λ¦¬ μμ μ±μ μ΄μμ λλ€.
4λ¨κ³: μ€ν κΈ°λ° νμ κ²μ¬
WebAssemblyλ μ€ν κΈ°λ° μ€ν λͺ¨λΈμ μ¬μ©ν©λλ€. κ° λͺ λ Ήμ΄λ μ€νμμ νΌμ°μ°μλ₯Ό μλΉνκ³ κ²°κ³Όλ₯Ό λ€μ μ€νμ νΈμν©λλ€. μ΄ λ¨κ³λ κ° λͺ λ Ήμ΄μ λν νΌμ°μ°μ μ€νμ μΈμ¬νκ² νμΈν©λλ€.
- νΌμ°μ°μ μΌμΉ: λͺ¨λ λͺ λ Ήμ΄μ λν΄ μ ν¨μ± κ²μ¬κΈ°λ νμ¬ μ€νμ μλ νΌμ°μ°μμ νμ μ΄ ν΄λΉ λͺ λ Ήμ΄κ° μμνλ νμ κ³Ό μΌμΉνλμ§ νμΈν©λλ€.
- νμ μ ν: λΈλ‘ μ€ν μ λ°μ κ±Έμ³ νμ μ΄ μ΄λ»κ² λ³νλμ§ μΆμ νμ¬ μΌκ΄μ±μ 보μ₯ν©λλ€.
- λΈλ‘ μ’ λ£: λΈλ‘μ λκ°λ λͺ¨λ κ²½λ‘κ° λμΌν νμ μ§ν©μ μ€νμ νΈμνλμ§ νμΈν©λλ€.
μμ: λͺ λ Ήμ΄κ° μ€ν 맨 μμ μ μλ₯Ό μμνμ§λ§ λΆλ μμμ μ«μλ₯Ό λ°κ²¬νκ±°λ, ν¨μ νΈμΆμ΄ λ°ν κ°μ μμνμ§ μλλ° μ€νμ κ°μ΄ μλ κ²½μ° μ ν¨μ± κ²μ¬μ μ€ν¨ν©λλ€.
κΈλ‘λ² κ΄λ ¨μ±: μ΄ λ¨κ³λ νμ μμ€ μΈμ΄μμ ννλ©° μ΅μ€νλ‘μμ 벑ν°κ° λ μ μλ νμ νΌλ μ·¨μ½μ μ λ°©μ§νλ λ° κ°μ₯ μ€μν©λλ€. μ격ν νμ κ·μΉμ κ°μ ν¨μΌλ‘μ¨ Wasmμ μμ μ΄ νμ μ¬λ°λ₯Έ νμ μ λ°μ΄ν°μ λν΄ μνλ¨μ 보μ₯ν©λλ€.
5λ¨κ³: κ° λ²μ λ° κΈ°λ₯ νμΈ
μ΄ λ¨κ³λ Wasm μ¬μ λ° νΈμ€νΈ νκ²½μ μν΄ μ μλ μ νκ³Ό μ μ½μ κ°μ ν©λλ€.
- λ©λͺ¨λ¦¬ λ° ν μ΄λΈ ν¬κΈ° μ ν: μ μΈλ λ©λͺ¨λ¦¬ λ° ν μ΄λΈ ν¬κΈ°κ° ꡬμ±λ μ νμ μ΄κ³Όνλμ§ νμΈνμ¬ λ¦¬μμ€ κ³ κ° κ³΅κ²©μ λ°©μ§ν©λλ€.
- κΈ°λ₯ νλκ·Έ: Wasm λͺ¨λμ΄ μ€νμ μ΄κ±°λ νΉμ κΈ°λ₯(μ: SIMD, μ€λ λ)μ μ¬μ©νλ κ²½μ°, μ΄ λ¨κ³λ λ°νμ νκ²½μ΄ ν΄λΉ κΈ°λ₯μ μ§μνλμ§ νμΈν©λλ€.
- μμ ννμ μ ν¨μ± κ²μ¬: μ΄κΈ°νμ μ¬μ©λλ μμ ννμμ΄ μ€μ λ‘ μμμ΄λ©° μ ν¨μ± κ²μ¬ μκ°μ νκ° κ°λ₯νμ§ νμΈν©λλ€.
κΈλ‘λ² κ΄λ ¨μ±: μ΄λ Wasm λͺ¨λμ΄ μμΈ‘ κ°λ₯νκ² λμνκ³ κ³Όλν 리μμ€λ₯Ό μλΉνμ§ μλλ‘ λ³΄μ₯νλ©°, 리μμ€ κ΄λ¦¬κ° ν΅μ¬μΈ 곡μ νκ²½ λ° ν΄λΌμ°λ λ°°ν¬μ μ€μν©λλ€. μλ₯Ό λ€μ΄, λ°μ΄ν° μΌν°μ κ³ μ±λ₯ μλ²μ©μΌλ‘ μ€κ³λ λͺ¨λμ μ£μ§μ 리μμ€ μ μ½μ΄ μλ IoT μ₯μΉμμ μ€νλλ λͺ¨λκ³Ό λ€λ₯Έ 리μμ€ κΈ°λμΉλ₯Ό κ°μ§ μ μμ΅λλ€.
6λ¨κ³: νΈμΆ κ·Έλν λ° ν¨μ μκ·Έλμ² κ²μ¦
μ΄ μ΅μ’ μ ν¨μ± κ²μ¬ λ¨κ³λ λͺ¨λ λ΄ ν¨μμ κ·Έ κ°μ Έμ€κΈ°/λ΄λ³΄λ΄κΈ° κ°μ κ΄κ³λ₯Ό κ²μ¬ν©λλ€.
- κ°μ Έμ€κΈ°/λ΄λ³΄λ΄κΈ° μΌμΉ: λͺ¨λ κ°μ Έμ¨ ν¨μμ μ μ λ³μκ° μ¬λ°λ₯΄κ² μ§μ λμλμ§, κ·Έλ¦¬κ³ λ΄λ³΄λΈ νλͺ©μ΄ μ ν¨νμ§ νμΈν©λλ€.
- ν¨μ νΈμΆ μΌκ΄μ±: λ€λ₯Έ ν¨μ(κ°μ Έμ¨ ν¨μ ν¬ν¨)μ λν λͺ¨λ νΈμΆμ΄ μ¬λ°λ₯Έ μΈμ νμ κ³Ό κ°μλ₯Ό μ¬μ©νκ³ λ°ν κ°μ΄ μ μ νκ² μ²λ¦¬λλμ§ νμΈν©λλ€.
μμ: λͺ¨λμ΄ `console.log` ν¨μλ₯Ό κ°μ Έμ¬ μ μμ΅λλ€. μ΄ λ¨κ³λ `console.log`κ° μ€μ λ‘ κ°μ Έμμ‘λμ§, κ·Έλ¦¬κ³ μμλλ μΈμ νμ (μ: λ¬Έμμ΄ λλ μ«μ)μΌλ‘ νΈμΆλλμ§ νμΈν©λλ€.
κΈλ‘λ² κ΄λ ¨μ±: μ΄λ λͺ¨λμ΄ λΈλΌμ°μ μ JavaScript νΈμ€νΈ, Go μ ν리μΌμ΄μ λλ Rust μλΉμ€ λ± νκ²½κ³Ό μ±κ³΅μ μΌλ‘ μΈν°νμ΄μ€ν μ μλλ‘ λ³΄μ₯ν©λλ€. μΌκ΄λ μΈν°νμ΄μ€λ κΈλ‘λ²νλ μννΈμ¨μ΄ μνκ³μμ μνΈ μ΄μ©μ±μ μν΄ νμμ μ λλ€.
κ²¬κ³ ν μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ 보μμ ν¨μ
μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μ μμ μΈ Wasm μ½λμ λν 첫 λ²μ§Έ λ°©μ΄μ μ λλ€. κ·Έ μ² μ ν¨μ Wasm λͺ¨λμ μ€ννλ λͺ¨λ μμ€ν μ 보μ νμΈμ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€.
λ©λͺ¨λ¦¬ μμ λ° μ΅μ€νλ‘μ λ°©μ§
νμ κ·μΉκ³Ό μ μ΄ νλ¦ λ¬΄κ²°μ±μ μ격νκ² κ°μ ν¨μΌλ‘μ¨ Wasm μ ν¨μ± κ²μ¬κΈ°λ C λ° C++μ κ°μ μ ν΅μ μΈ μΈμ΄λ₯Ό κ΄΄λ‘νλ λ§μ μΌλ°μ μΈ λ©λͺ¨λ¦¬ μμ μ± μ·¨μ½μ μ μ κ±°ν©λλ€. λ²νΌ μ€λ²νλ‘, use-after-free, λκΈλ§ ν¬μΈν°μ κ°μ λ¬Έμ λ μ ν¨μ± κ²μ¬κΈ°κ° κ·Έλ¬ν μμ μ μλνλ λͺ¨λμ κ±°λΆνλ―λ‘ μ€κ³μ λλΆλΆ λ°©μ§λ©λλ€.
κΈλ‘λ² μμ: κΈμ΅ μλΉμ€ νμ¬κ° κ³ λΉλ κ±°λ μκ³ λ¦¬μ¦μ Wasmμ μ¬μ©νλ€κ³ μμν΄ λ³΄μμμ€. λ©λͺ¨λ¦¬ μμ λ²κ·Έλ μΉλͺ μ μΈ μ¬μ μ μμ€μ΄λ μμ€ν λ€μ΄νμμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. Wasm μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μμ λ§ μν μ νμ¬, Wasm μ½λ μ체μ κ·Έλ¬ν λ²κ·Έκ° μ μ©λκΈ° μ μ μ‘νλλ‘ λ³΄μ₯ν©λλ€.
μλΉμ€ κ±°λΆ(DoS) 곡격 μν
μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ λν λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ DoS 곡격μ λ°©μ΄ν©λλ€.
- 리μμ€ μ ν: λ©λͺ¨λ¦¬ λ° ν μ΄λΈ ν¬κΈ°μ λν μ νμ κ°μ νμ¬ λͺ¨λμ΄ μ¬μ© κ°λ₯ν λͺ¨λ 리μμ€λ₯Ό μλΉνλ κ²μ λ°©μ§ν©λλ€.
- 무ν 루ν νμ§(κ°μ μ μΌλ‘): λͺ¨λ 무ν 루νλ₯Ό λͺ μμ μΌλ‘ νμ§νμ§λ μμ§λ§(μΌλ°μ μΈ κ²½μ° νμ λΆκ°λ₯ν¨), CFG λΆμμ μλμ μΈ λ¬΄ν 루νλ κ³Όλν κ³μ°μΌλ‘ μ΄μ΄μ§λ κ²½λ‘λ₯Ό λνλΌ μ μλ ꡬ쑰μ μ΄μμ μλ³ν μ μμ΅λλ€.
- μλͺ»λ νμμ λ°μ΄λ리 λ°©μ§: ꡬ쑰μ μΌλ‘ μ ν¨νμ§ μμ λͺ¨λμ κ±°λΆνμ¬ νμ μ€λ₯λ‘ μΈν λ°νμ μΆ©λμ λ°©μ§ν©λλ€.
μμΈ‘ κ°λ₯ν λμ 보μ₯
μ격ν νμ κ²μ¬μ μλ―Έλ‘ μ λΆμμ Wasm λͺ¨λμ΄ μμΈ‘ κ°λ₯νκ² λμνλλ‘ λ³΄μ₯ν©λλ€. μ΄λ¬ν μμΈ‘ κ°λ₯μ±μ μ λ’°ν μ μλ μμ€ν μ ꡬμΆνλ λ° μ€μνλ©°, νΉν λ€λ₯Έ κ΅¬μ± μμκ° μννκ² μνΈ μμ©ν΄μΌ νλ λΆμ° νκ²½μμ λμ± κ·Έλ μ΅λλ€. κ°λ°μλ μ ν¨μ±μ΄ κ²μ¬λ Wasm λͺ¨λμ΄ μμμΉ λͺ»ν λΆμμ© μμ΄ μλλ λ‘μ§μ μ€νν κ²μ΄λΌκ³ μ λ’°ν μ μμ΅λλ€.
μ 3μ μ½λ μ λ’°
λ§μ κΈλ‘λ² μννΈμ¨μ΄ 곡κΈλ§μμ μ‘°μ§μ λ€μν μ 3μ 곡κΈμ 체μ μ½λλ₯Ό ν΅ν©ν©λλ€. WebAssemblyμ μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μ΄λ¬ν μΈλΆ λͺ¨λμ μμ μ±μ νκ°νλ νμ€νλ λ°©λ²μ μ 곡ν©λλ€. 곡κΈμ 체μ λ΄λΆ κ°λ° κ΄νμ΄ λΆμμ νλλΌλ, μ ꡬνλ Wasm μ ν¨μ± κ²μ¬κΈ°λ μ½λκ° λ°°ν¬λκΈ° μ μ λ§μ μ μ¬μ 보μ κ²°ν¨μ μ‘μλ΄μ΄ μνκ³μ λν λ ν° μ λ’°λ₯Ό μ‘°μ±ν μ μμ΅λλ€.
WebAssemblyμμ νμ κ²μ¬μ μν
WebAssemblyμ νμ κ²μ¬λ λ¨μν μ μ λΆμ λ¨κ³κ° μλλΌ μ€ν λͺ¨λΈμ ν΅μ¬ λΆλΆμ λλ€. μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ νμ κ²μ¬λ Wasm μ½λμ μλ―Έλ‘ μ μλ―Έκ° λ³΄μ‘΄λκ³ μμ μ΄ νμ νμ μ λ§κ² μνλλλ‘ λ³΄μ₯ν©λλ€.
νμ κ²μ¬λ 무μμ μ‘μλ΄λκ°?
μ ν¨μ± κ²μ¬κΈ° λ΄μ μ€ν κΈ°λ° νμ κ²μ¬ λ©μ»€λμ¦μ λͺ¨λ λͺ λ Ήμ΄λ₯Ό λ©΄λ°ν μ‘°μ¬ν©λλ€.
- λͺ λ Ήμ΄ νΌμ°μ°μ: `i32.add`μ κ°μ λͺ λ Ήμ΄μ κ²½μ°, μ ν¨μ± κ²μ¬κΈ°λ νΌμ°μ°μ μ€νμ μμ λ κ°μ΄ λͺ¨λ `i32`(32λΉνΈ μ μ)μΈμ§ νμΈν©λλ€. λ§μ½ νλκ° `f32`(32λΉνΈ λΆλ μμμ )μ΄λ©΄ μ ν¨μ± κ²μ¬λ μ€ν¨ν©λλ€.
- ν¨μ νΈμΆ: ν¨μκ° νΈμΆλ λ, μ ν¨μ± κ²μ¬κΈ°λ μ 곡λ μΈμμ μμ νμ μ΄ ν¨μμ μ μΈλ λ§€κ°λ³μ νμ κ³Ό μΌμΉνλμ§ νμΈν©λλ€. λ§μ°¬κ°μ§λ‘, λ°ν κ°(μλ κ²½μ°)μ΄ ν¨μμ μ μΈλ λ°ν νμ κ³Ό μΌμΉνλμ§ νμΈν©λλ€.
- μ μ΄ νλ¦ κ΅¬μ‘°: `if` λ° `loop`μ κ°μ ꡬ쑰λ λΆκΈ°μ λν νΉμ νμ μꡬ μ¬νμ΄ μμ΅λλ€. μ ν¨μ± κ²μ¬κΈ°λ μ΄κ²λ€μ΄ μΆ©μ‘±λλμ§ νμΈν©λλ€. μλ₯Ό λ€μ΄, λΉμ΄ μμ§ μμ μ€νμ κ°μ§ `if` λͺ λ Ήμ΄λ λͺ¨λ λΆκΈ°κ° λμΌν κ²°κ³Ό μ€ν νμ μ μμ±νλλ‘ μꡬν μ μμ΅λλ€.
- μ μ λ³μ λ° λ©λͺ¨λ¦¬ μ κ·Ό: μ μ λ³μλ λ©λͺ¨λ¦¬ μμΉμ μ κ·Όνλ €λ©΄ μ κ·Όμ μ¬μ©λ νΌμ°μ°μκ° μ¬λ°λ₯Έ νμ μ΄μ΄μΌ ν©λλ€(μ: λ©λͺ¨λ¦¬ μ κ·Όμ μ€νμ μ λν `i32`).
μ격ν νμ κ²μ¬μ μ΄μ
- λ²κ·Έ κ°μ: λ§μ μΌλ°μ μΈ νλ‘κ·Έλλ° μ€λ₯λ λ¨μν νμ λΆμΌμΉμ λλ€. Wasmμ μ ν¨μ± κ²μ¬λ λ°νμ μ΄μ μ μ΄λ₯Ό μ‘°κΈ°μ μ‘μλ λλ€.
- μ±λ₯ ν₯μ: νμ μ΄ μ ν¨μ± κ²μ¬ μμ μλ €μ§κ³ νμΈλκΈ° λλ¬Έμ, Wasm λ°νμμ μ€ν μ€μ λ°νμ νμ κ²μ¬λ₯Ό μνν νμ μμ΄ κ³ λλ‘ μ΅μ νλ κΈ°κ³ μ½λλ₯Ό μμ±ν μ μλ κ²½μ°κ° λ§μ΅λλ€.
- 보μ κ°ν: νλ‘κ·Έλ¨μ΄ μ κ·Όνλ λ°μ΄ν°μ νμ μ μλͺ» ν΄μνλ νμ νΌλ μ·¨μ½μ μ 보μ μ΅μ€νλ‘μμ μ€μν μμΈμ λλ€. Wasmμ κ°λ ₯ν νμ μμ€ν μ μ΄λ₯Ό μ κ±°ν©λλ€.
- μ΄μμ±: νμ μμ ν Wasm λͺ¨λμ νμ μλ―Έλ‘ μ΄ κΈ°λ³Έ νλμ¨μ΄κ° μλ Wasm μ¬μμ μν΄ μ μλκΈ° λλ¬Έμ λ€λ₯Έ μν€ν μ²μ μ΄μ 체μ μμ μΌκ΄λκ² λμν©λλ€.
κΈλ‘λ² Wasm λ°°ν¬λ₯Ό μν μ€μ μ κ³ λ € μ¬ν
μ‘°μ§λ€μ΄ κΈλ‘λ² μ ν리μΌμ΄μ μ WebAssemblyλ₯Ό μ μ λ λ§μ΄ μ±νν¨μ λ°λΌ, μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ ν¨μλ₯Ό μ΄ν΄νλ κ²μ΄ μ€μν©λλ€.
λ°νμ ꡬν λ° μ ν¨μ± κ²μ¬
λ€μν Wasm λ°νμ(μ: Wasmtime, Wasmer, lucet, λΈλΌμ°μ μ λ΄μ₯ μμ§)μ μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ ꡬνν©λλ€. λͺ¨λ Wasm μ¬μμ μ€μνμ§λ§ μ±λ₯μ΄λ νΉμ κ²μ¬μμ λ―Έλ¬ν μ°¨μ΄κ° μμ μ μμ΅λλ€.
- Wasmtime: μ±λ₯κ³Ό Rust μνκ³μμ ν΅ν©μΌλ‘ μ λͺ ν Wasmtimeμ μ격ν μ ν¨μ± κ²μ¬λ₯Ό μνν©λλ€.
- Wasmer: ν¬κ΄μ μΈ μ ν¨μ± κ²μ¬ νλ‘μΈμ€λ₯Ό ν΅ν΄ 보μκ³Ό μ±λ₯μ κ°μ‘°νλ λ€μ¬λ€λ₯ν Wasm λ°νμμ λλ€.
- λΈλΌμ°μ μμ§: Chrome, Firefox, Safari, Edge λͺ¨λ JavaScript μμ§μ κ³ λλ‘ μ΅μ νλκ³ μμ ν Wasm μ ν¨μ± κ²μ¬ λ‘μ§μ ν΅ν©νκ³ μμ΅λλ€.
κΈλ‘λ² κ΄μ : λ€μν νκ²½μ Wasmμ λ°°ν¬ν λ, μ νν λ°νμμ μ ν¨μ± κ²μ¬ ꡬνμ΄ μ΅μ Wasm μ¬μ λ° λ³΄μ λͺ¨λ² μ¬λ‘μ λ§μΆ° μ΅μ μνμΈμ§ νμΈνλ κ²μ΄ μ€μν©λλ€.
λꡬ λ° κ°λ° μν¬νλ‘μ°
μ½λλ₯Ό WasmμΌλ‘ μ»΄νμΌνλ κ°λ°μλ μ ν¨μ± κ²μ¬ νλ‘μΈμ€λ₯Ό μΈμ§ν΄μΌ ν©λλ€. λλΆλΆμ μ»΄νμΌλ¬κ° μ΄λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νμ§λ§, μ μ¬μ μΈ μ ν¨μ± κ²μ¬ μ€λ₯λ₯Ό μ΄ν΄νλ©΄ λλ²κΉ μ λμμ΄ λ μ μμ΅λλ€.
- μ»΄νμΌλ¬ μΆλ ₯: μ»΄νμΌλ¬κ° μ ν¨νμ§ μμ Wasmμ μμ±νλ©΄ μ ν¨μ± κ²μ¬ λ¨κ³μμ μ΄λ₯Ό μ‘μλ λλ€. κ°λ°μλ μ»΄νμΌλ¬ νλκ·Έλ₯Ό μ‘°μ νκ±°λ μμ€ μ½λ λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ ν μ μμ΅λλ€.
- Wasm-Pack λ° κΈ°ν λΉλ λꡬ: λ€μν νλ«νΌμ© Wasm λͺ¨λμ μ»΄νμΌ λ° ν¨ν€μ§μ μλννλ λꡬλ μ’ μ’ μ ν¨μ± κ²μ¬ νμΈμ μ묡μ λλ λͺ μμ μΌλ‘ ν΅ν©ν©λλ€.
보μ κ°μ¬ λ° κ·μ μ€μ
κ·μ μ°μ (μ: κΈμ΅, μλ£)μμ μ΄μλλ μ‘°μ§μ κ²½μ°, Wasm μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ 보μ κ·μ μ€μ λ Έλ ₯μ κΈ°μ¬ν©λλ€. λͺ¨λ μ λ’°ν μ μλ μ½λκ° λ³΄μ μ·¨μ½μ λ° νμ 무결μ±μ νμΈνλ μ격ν μ ν¨μ± κ²μ¬ νλ‘μΈμ€λ₯Ό κ±°μ³€μμ μ μ¦ν μ μλ λ₯λ ₯μ μλΉν μ΄μ μ΄ λ μ μμ΅λλ€.
μ€ν κ°λ₯ν ν΅μ°°λ ₯: CI/CD νμ΄νλΌμΈμ Wasm μ ν¨μ± κ²μ¬ νμΈμ ν΅ν©νλ κ²μ κ³ λ €νμμμ€. μ΄λ μ ν¨μ±μ΄ κ²μ¬λ Wasm λͺ¨λλ§ λ°°ν¬λλλ‘ νλ νλ‘μΈμ€λ₯Ό μλννμ¬ μΆκ°μ μΈ λ³΄μ λ° νμ§ κ΄λ¦¬ κ³μΈ΅μ μΆκ°ν©λλ€.
Wasm μ ν¨μ± κ²μ¬μ λ―Έλ
WebAssembly μνκ³λ λμμμ΄ μ§ννκ³ μμ΅λλ€. ν₯ν κ°λ°μλ λ€μμ΄ ν¬ν¨λ μ μμ΅λλ€.
- λ μ κ΅ν μ μ λΆμ: κΈ°λ³Έ νμ λ° μ μ΄ νλ¦ κ²μ¬λ₯Ό λμ΄μλ μ μ¬μ μ·¨μ½μ μ λν λ κΉμ λΆμ.
- νμ κ²μ¦ λꡬμμ ν΅ν©: μ€μν Wasm λͺ¨λμ μ νμ±μ λν μνμ μ¦λͺ μ νμ©.
- νλ‘ν κΈ°λ° μ ν¨μ± κ²μ¬: μμ μ¬μ© ν¨ν΄μ λ°λΌ μ ν¨μ± κ²μ¬λ₯Ό μ‘°μ νμ¬ λ³΄μκ³Ό μ±λ₯μ λͺ¨λ μ΅μ ν.
κ²°λ‘
WebAssembly λͺ¨λ μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ μμ νκ³ μ λ’°ν μ μλ μ€ν λͺ¨λΈμ μ΄μμ λλ€. λ€μ΄μ€λ κ° λͺ¨λμ ꡬ쑰μ μ νμ±, μ μ΄ νλ¦ λ¬΄κ²°μ±, λ©λͺ¨λ¦¬ μμ μ± λ° νμ 건μ μ±μ κΌΌκΌΌνκ² νμΈν¨μΌλ‘μ¨, μ μμ μΈ μ½λμ νλ‘κ·Έλλ° μ€λ₯μ λν νμμ μΈ λ³΄νΈμ μν μ ν©λλ€.
μ½λκ° λ€νΈμν¬λ₯Ό ν΅ν΄ μμ λ‘κ² μ΄λνκ³ μλ§μ μ₯μΉμμ μ€νλλ μνΈ μ°κ²°λ κΈλ‘λ² λμ§νΈ νκ²½μμ μ΄ μ ν¨μ± κ²μ¬ νλ‘μΈμ€μ μ€μμ±μ μ무리 κ°μ‘°ν΄λ μ§λμΉμ§ μμ΅λλ€. μ΄λ WebAssemblyμ μ½μμΈ κ³ μ±λ₯, μ΄μμ±, 보μμ΄ μ§λ¦¬μ μΆμ²λ μ ν리μΌμ΄μ μ 볡μ‘μ±μ κ΄κ³μμ΄ μΌκ΄λκ³ μμ νκ² μ€νλ μ μλλ‘ λ³΄μ₯ν©λλ€. μ μΈκ³ κ°λ°μ, κΈ°μ λ° μ΅μ’ μ¬μ©μμκ² κ²¬κ³ ν μ ν¨μ± κ²μ¬ νμ΄νλΌμΈμ WebAssembly νλͺ μ κ°λ₯νκ² νλ μ‘°μ©ν 보νΈμμ λλ€.
WebAssemblyκ° λΈλΌμ°μ λ₯Ό λμ΄ κ·Έ μμμ κ³μ νμ₯ν¨μ λ°λΌ, Wasm κΈ°λ° μμ€ν μ ꡬμΆνκ±°λ ν΅ν©νλ λͺ¨λ μ¬λμκ² κ·Έ μ ν¨μ± κ²μ¬ λ©μ»€λμ¦μ λν κΉμ μ΄ν΄λ νμμ μ λλ€. μ΄λ μμ ν μ½λ μ€νμ μ€μν μ§μ μ λνλ΄λ©° νλ κΈλ‘λ² μννΈμ¨μ΄ μΈνλΌμ νμμ μΈ κ΅¬μ± μμμ λλ€.